from logging import getLogger
from logging.config import dictConfig
import os

log_path = '../logs'

LOGGING_DIC = {
    'level': 'debug',  # log_purview
    'version': 1.0,  # log_version
    'disable_existing_loggers': False,  # whether_to_disable
    # log_format
    'formatters': {
        'stand': {
            'format': '[%(levelname)s]%(asctime)s [%(message)s] l:%(lineno)s %(filename)s -> %(funcName)s',
            'datefmt': '%Y-%m-%d %H:%M:%S',
        },
        'simple': {
            'format': '[%(levelname)s] %(asctime)s [%(message)s]',
            'datefmt': '%Y-%m-%d %H:%M:%S',
        },
    },
    'filters': {},
    # 日志处理器 是打印到控制台还是输出到文件里 写入文件a还是b
    'handlers': {
        'console_info_handler': {
            'level': 'INFO',  # 日志处理的级别限制
            'class': 'logging.StreamHandler',  # 输出console
            'formatter': 'stand'  # log_format
        },
        'console_debug_handler': {
            'level': 'DEBUG',  # 日志处理的级别限制
            'class': 'logging.StreamHandler',  # 输出console
            'formatter': 'stand'  # log_format
        },
        'file_info_handler': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,日志轮转
            'filename': fr'{log_path}\info_log.log',
            'maxBytes': 1024 * 1024 * 1,  # 日志大小 10M
            'backupCount': 10,  # 日志文件保存数量限制
            'encoding': 'utf-8',
            'formatter': 'stand',
        },
        'file_debug_handler': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,日志轮转
            'filename': fr'{log_path}/debug_log.log',
            'maxBytes': 1024 * 1024 * 1,  # 日志大小 10M
            'backupCount': 10,  # 日志文件保存数量限制
            'encoding': 'utf-8',
            'formatter': 'stand',
        },
    },
    # 日志记录器
    'loggers': {
        'debug': {
            'handlers': ['console_debug_handler', 'file_debug_handler'],
            'level': 'DEBUG',
            'propagate': False,
        },
        '': {
            'handlers': ['file_info_handler'],
            'level': 'INFO',
            'propagate': False,
        },
    }
}

if not os.path.exists(log_path):
    os.makedirs(log_path, exist_ok=True)

"""
debug 调试信息
info 普通信息
warning 警告信息
error 错误信息
critical 严重信息
"""

dictConfig(LOGGING_DIC)

# getLogger('debug') 调试模式
# getLogger('')  # /getLogger() 正常模式
logger = getLogger('debug')
logger.info('日志配置加载成功')
